<?php
namespace app\index\controller;

use think\Controller;
use think\Db;
use think\Request;
use think\Session;
use think\config;
use Qiniu\Auth as Auth;
use Qiniu\Storage\BucketManager;
use Qiniu\Storage\UploadManager;

// 前台个人中心
class User extends Islogin
{

    public function index()
    {
        // 获取session
        $session = Session::get();

        // 获取id
        $id = $session['hmy_user']['id'];
 
        // 一级分类
        $category = DB::name('category')->where('pid','0,')->paginate(4);

        // 查询关注
        $follow = Db::table(['follow' =>'f','hmy_user' =>'u','users_follow'=>'uf'])
                    // 关注表的用户id = 用户关注表的用户id  用户id = 用户关注表的关注id
                    ->where('f.id = uf.fid && u.id = uf.uid && uf.uid = '.$id)
                    // 查询用户关注了多少人
                    ->field('uf.fid')
                    ->select();

        // 关注数量
        $follow_num = count($follow);





        // 查询粉丝
        $fans = Db::table(['fans' =>'f','hmy_user' =>'u','users_fans'=>'uf'])
                    ->where('f.id = uf.fid && u.id = uf.uid && uf.uid = '.$id)
                    ->field('uf.fid')
                    ->select();

        // 关注数量
        $fans_num = count($fans);




        // 查询收藏
        $like = Db::table('like')
                    ->where('user_id= '.$id)
                    ->field('id')
                    ->select();


        // 关注数量
        $like_num = count($like);


        // 查询评论
        $comment = Db::table(['picture' =>'p','comment'=>'m'])
                    ->where('m.pid = p.id && m.uid= '.$id)
                    ->select();

        // 喜欢数量
        $comment_num = count($comment);



        // 遍历分类(添加)
        $res = Db::table('category')
                    ->order('path', 'id')
                    ->select();


        // 查询作品
        $list = Db::table(['picture' => 'p','category'=>'c'])
                    ->where('c.id = p.cate_id && user_id ='.$id)
                    ->field('p.id,p.src,p.title')
                    ->limit(4)
                    ->order('p.id','desc')
                    ->select();

        // 作品总数
        $list1 = Db::table(['picture' => 'p','category'=>'c'])
                    ->where('c.id = p.cate_id && user_id ='.$id)
                    ->order('p.id','desc')
                    ->select();

        $list_num = count($list1);

        // 查询收藏

        return view('index@user/index',[
            'session' => $session,
            'category' => $category,
            'follow_num' => $follow_num,
            'fans_num' => $fans_num,
            'like_num' => $like_num,
            'comment_num' => $comment_num,
            'list' => $list,
            'list_num' => $list_num,
            'res' => $res
        ]);
    }


    // 修改资料
    public function edit()
    {
        // 获取session
        $session = Session::get();

        // 查询分类
        $category = DB::name('category')->where('pid','0,')->paginate(4);

        // 返回
        return view('index@user/edit',['session' => $session,'category' => $category]);
    }


    // 执行修改资料
    public function doEdit(Request $request)
    {
       
        // 接收数据
        $data = $request->post();

        // 获取id
        $id = $request->post('id');

        // 接收文件
        $file = $request->file('file');
        
        // 判断修改上传头像
        if ($file) {

            // 要上传图片的本地路径
            $filePath = $file->getRealPath();

            $ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);  //后缀

            $img = ['png', 'jpg', 'jpeg'];

            if (!in_array($ext, $img)){

                return $this->error('上传的文件必须为图片格式!');

            }


            // 上传到七牛后保存的文件名
            $key = substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;

            // 需要填写 Access Key 和 Secret Key
            $accessKey = Config::get('qiniu.accessKey');
            $secretKey = Config::get('qiniu.secretKey');

            // 构建鉴权对象
            $auth = new Auth($accessKey, $secretKey);

            // 要上传的空间
            $bucket = Config::get('qiniu.bucket');
            $domain = Config::get('qiniu.DOMAIN');

            $token = $auth->uploadToken($bucket);

            // 初始化 UploadManager 对象并进行文件的上传
            $uploadMgr = new UploadManager();

            // 调用 UploadManager 的 putFile 方法进行文件的上传
            list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);


            $data['icon'] = $ret['key'];

        }

        // 获取session
        $session = Session::get('hmy_user');
        $uid = $session['id'];

        // 获取用户资料
        $user = DB::name('hmy_user')->where('tel',$data['tel'])->where('id','<>',$uid)->find();
        $name = DB::name('hmy_user')->where('name',$data['name'])->where('id','<>',$uid)->find();

        // 返回错误信息
        if ($user) {

            return $this->error('电话号码重复');
        }

        if ($name) {

            return $this->error('用户名重复');
        }


        // 更新数据
        $result = Db::table('hmy_user')->where('id', $id)->update($data);

        // 查询数据
        $hmy = DB::name('hmy_user')->where('id',$uid)->find();
        
        // 定义数据
        $data = [
            'id' => $hmy['id'],
            'name' => $hmy['name'],
            'tel' => $hmy['tel'],
            'pass' => $hmy['pass'],
            'sex' => $hmy['sex'],
            'icon' => $hmy['icon'],
            'province' => $hmy['province'],
            'status' => $hmy['status'],
            'regtime' => $hmy['regtime']
        ];


        // 返回
       if ($result > 0) {

            // 更新session
            Session::set('hmy_user',$data);
           return $this->success('保存成功..');

       } else {

           return $this->error('保存失败,请重试...');

       }
    }


    // 修改密码
    public function pass()
    {
        // 获取session
        $session = Session::get();

        // 获取用户id
        $id = $session['hmy_user']['id'];

        // 获取分类
        $category = DB::name('category')->where('pid','0,')->paginate(4);

        // 返回
        return view('index@user/editPass',['session' => $session,'category' => $category]);
    }


    // 执行修改密码
    public function doPass(Request $request)
    {
        // 接收数据
        $post = $request->post();

        // 获取id
        $session = Session::get('hmy_user');
        $id = $session['id'];

        
        // 查询数据
        $data = DB::table('hmy_user')->find($id);

        // 判断原密码
        if (md5($post['ypass']) != $data['pass']) {

            return $this->error('原密码错误,请重新输入...');

        }

        // 判断两次密码
        if ($post['pass'] != $post['repass']) {

            return $this->error('两次密码不一致,请重新输入...');

        }

        // 判断原密码和新密码是否一致
        if (md5($post['pass']) == $data['pass']) {

            return $this->error('新密码和原密码不能为一致,请重新输入...');

        }

        // 加密
        $post['pass'] = md5($post['pass']);



        // 删除原密码和重复密码
        unset($post['repass']);
        unset($post['ypass']);

        // 执行sql语句
        $result = Db::table('hmy_user')->where('id', $id)->update($post);

        // 返回
       if ($result > 0) {

            // 更新session
            Session::delete('hmy_user');
           return $this->success('修改成功,请重新登录', url('index/Index/index'));

        }else{

           return $this->error('保存失败,请重试...');

       }
    }



}
